// /*
//  * @features: 主要功能
//  * @description: 内容说明
//  * @Date: 2021-10-28 19:30:45
//  * @Author: judu233(769471424@qq.com)
//  * @LastEditTime: 2021-10-28 23:34:31
//  * @LastEditors: judu233
//  */

// import { EDITOR } from "cc/env";
// import c3d from "../cc";

// /**
//  * FBO 更新模式枚举变量
//  * @enum FBONodeComponent._updateMode
//  * @static
//  * @private
//  * @namespace FBONodeComponent
//  */
// let UpdateMode = c3d.Enum({
//     /**
//      * 近更新一次
//      * @property {Number} ONCE
//      * @static
//      */
//     ONCE: 0,
//     /**
//      * 同步更新
//      * @property {Number} ONCE
//      * @static
//      */
//     ALWAYS: 1
// });


// export class FBOComponent extends c3d.Component {
//     private _isPaused = false;

//     _renderTexture
//     _fboSprite
//     _fboCamera

//     /***"FBO 目标节点" */
//     _target: c3d.Node;

//     /**
//      * FBO 对象默认所属节点的分组。同 cc.Node 的 group 属性
//      * @property {String} group
//      * @default fbo
//      */
//     group = "fbo";

//     /**"是否在在编辑器中预览" */
//     private _preview = true;
//     public get preview() {
//         if (this.preview)
//             this.updateFBO();
//         return this._preview;
//     }
//     /**
//     * 在编辑器模式下开启实时刷新预览
//     * @property {Boolean} preview
//     * @default true
//     */
//     public set preview(value) { this._preview = value; }

//     /**
//      * 是否需要翻转纹理
//      * @property {Boolean} flipY
//      * @default true
//      */
//     private _flipY = true;
//     public get flipY() { return this._flipY; }
//     public set flipY(value) {
//         this._flipY = value;
//         if (this._fboSprite && this._fboSprite.spriteFrame) {
//             this._fboSprite.spriteFrame.setFlipY(value);
//         }
//         // this.node.scaleY *= -1;
//     }

//     /**
//      * FBO 对象默认的更新模式 "更新模式，默认实时更新"
//      * @property {UpdateMode} updateMode
//      * @default UpdateMode.ALWAYS
//      */
//     _updateMode = UpdateMode.ALWAYS;
//     get updateMode() { return this._updateMode; }
//     set updateMode(val) { this._updateMode = val; }

//     /**
//      * 摄像机用于清除屏幕的背景色。
//      * @property {Color} backgroundColor
//      */
//     _backgroundColor = c3d.color(0, 0, 0, 0);
//     get backgroundColor() { return this._backgroundColor; }
//     set backgroundColor(value) {
//         this._backgroundColor.set(value);
//         this._fboCamera.backgroundColor = value;
//     }

//     /**
//      * 初始化内部数据
//      * @method _initData
//      * @private
//      */
//     _initData() {
//         this._isPaused = false;
//     }
//     /**
//      * 初始化 RenderTexture 对象
//      * @method _initFBORenderTexture
//      * @private
//      */
//     _initFBORenderTexture() {
//         if (!this._renderTexture) {
//             this._renderTexture = new c3d.RenderTexture();
//         }
//     }
//     /**
//      * 初始化 FBO 最终渲染目标对象 c3d.Sprite
//      * @method _initFBOSprite
//      * @private
//      */
//     _initFBOSprite() {
//         if (this.node)
//             this._fboSprite = this.node.getComponent(c3d.Sprite);
//         if (!this._fboSprite && this.node) {
//             this._fboSprite = this.node.addComponent(c3d.Sprite);
//         }
//         if (!this._fboSprite.spriteFrame) {
//             var fboSpriteFrame = new c3d.SpriteFrame();
//             this._fboSprite.spriteFrame = fboSpriteFrame;
//             this._fboSprite.spriteFrame.setFlipY(this.flipY);
//         }

//         // this.node.scaleY = this.flipY ? -1 : 1;
//     }
//     /**
//      * 初始化 FBO 专用 c3d.Camera
//      * @method _initFBOCamera
//      * @private
//      */
//     _initFBOCamera() {
//         if (this.node)
//             this._fboCamera = this.node.getComponent(c3d.Camera);
//         if (!this._fboCamera && this.node) {
//             this._fboCamera = this.node.addComponent(c3d.Camera);
//         }
//         this._fboCamera.depth = 0;
//         this._fboCamera.clearFlags = c3d.Camera.ClearFlags.COLOR;
//         this._fboCamera.backgroundColor = this.backgroundColor;
//         this._fboCamera.targetTexture = this._renderTexture;
//         this._fboCamera.enabled = false;
//     }
//     /**
//      * onLoad 生命周期函数，将本 c3d.Node 的 group 切换为用户指定的分组
//      * @method onLoad
//      */
//     onLoad() {
//         if (this.node)
//             this.node.group = this.group;
//     }
//     /**
//      * start 生命周期函数，初始化一些内部用对象，调用一次更新 FBO 函数 (UpdateMode.ONCE 模式仅此一次调用)
//      * @method start
//      */
//     start() {
//         this._initData();
//         this._initFBORenderTexture();
//         this._initFBOSprite();
//         this._initFBOCamera();
//         this.updateFBO();
//     }
//     /**
//      * 更新 RenderTexture 大小
//      * @method _updateRenderTextureSize
//      * @private
//      */
//     _updateRenderTextureSize(width, height) {
//         if (!this._renderTexture) {
//             return;
//         }
//         if (window.jsb) {
//             // https://forum.cocos.org/t/cc-rendertexture-updatesize/99634
//             this._renderTexture.destroy();
//             this._renderTexture = new c3d.RenderTexture();
//             this._renderTexture.initWithSize(width, height, c3d.gfx.RB_FMT_S8);
//         } else {
//             this._renderTexture.updateSize(width, height);
//         }
//     }
//     /**
//      * update 生命周期函数，每帧调用，更新 FBO (UpdateMode.ALWAYS 模式每帧调用)
//      * @method update
//      */
//     update() {
//         if (EDITOR && !this.preview) {
//             return;
//         }
//         if (this._isPaused) {
//             return;
//         }
//         if (this.updateMode == UpdateMode.ALWAYS) {
//             this.updateFBO();
//         }
//     }
//     /**
//      * 刷新一次 FBO 并将其渲染到 c3d.Sprite 对象中
//      * @method updateFBO
//      */
//     updateFBO() {
//         if (EDITOR && !this.preview) {
//             return;
//         }
//         if (this._fboCamera) {
//             this._fboCamera.enabled = true;
//             this._fboCamera.render(this._target);
//         }
//         if (this._fboSprite && this._fboSprite.spriteFrame)
//             this._fboSprite.spriteFrame.setTexture(this._renderTexture);
//         if (this._fboCamera)
//             this._fboCamera.enabled = false;
//     }
//     /**
//      * 暂停刷新
//      * @method pause
//      */
//     pause() {
//         this._isPaused = true;
//     }
//     /**
//      * 继续刷新
//      * @method resume
//      */
//     resume() {
//         this._isPaused = false;
//     }
// }

